# -*- coding: utf-8 -*-
'''
Created on Mar 22, 2011

@author: kivson
'''
import re

class Citacao(object):
    '''
    Classe citação, para armazenar a citação e o autor.
    '''

    def __init__(self, txt, autor = None):
        '''
        Constructor
        '''
        if not autor:
            autor = ''
        self.conteudo = txt
        self.autor = autor
        self.tags = []
    def __repr__(self):
        tagsString = ''.join([tag + "- " for tag in self.tags])
        tagsString = tagsString[:-2]
        return "< {0}, {1}, {2}>".format(self.conteudo,self.autor, tagsString)

    def addTags(self, tag):
        self.tags.append(tag)

class CitacaoLimpa(Citacao):

    def __init__(self, *args, **kargs):

        super(CitacaoLimpa, self).__init__(*args, **kargs)
        self.tamanhoMax = 2000
        self.tamanhoMaxAutor = 254
        self.limpaConteudo()
        self.limpaAutor()
        self.formataConteudo()

    def addTags(self,tag):
        super(CitacaoLimpa, self).addTags(self.limpaTag(tag))

    def limpaTag(self, tag):
        if tag.startswith('Categoria:'):
            tag = tag [10:]
        return tag

    def limpaConteudo(self):
        self.conteudo = self.conteudo.strip(' \n')
        self.conteudo = self.removerColchetes01(self.conteudo)
        if len(self.conteudo) > self.tamanhoMax:
            self.conteudo = self.conteudo[:self.tamanhoMax] + "[...]"
        #self.conteudo = self.conteudo.replace('"', '')

    def limpaAutor(self):
        self.autor = self.autor.strip(' \n')
        self.autor = self.removerColchetes(self.autor)
        self.removerWikiRef()
        if len(self.autor) > self.tamanhoMaxAutor:
            self.autor = self.autor[:self.tamanhoMaxAutor]

    def removerWikiRef(self):
        if self.autor.startswith("w:") :
            self.autor = self.autor[2:]

    def removerColchetes01(self,frase):
        frase =  frase.replace("[","")
        frase =  frase.replace("]","")
        return frase

    def removerColchetes(self, frase):
        #print frase
        posBracersAbertos = frase.find('[[')
        while not posBracersAbertos == -1:
            posBracersFechados = frase.find(']]')
            if posBracersFechados == -1:
                posBracersFechados = frase.find(']')
                if posBracersFechados == -1:
                    posBracersFechados = len(frase)
                    depoisBracer = len(frase)
                else:
                    depoisBracer = posBracersFechados + 1
            else:
                depoisBracer = posBracersFechados + 2
            temPipe = frase.find('|')
            if not temPipe == -1:
                inicio = temPipe +1
            else:
                inicio = posBracersAbertos + 2

            fim = posBracersFechados
            frase = frase[:posBracersAbertos] + frase[inicio:fim] + frase[depoisBracer:]


            posBracersAbertos = frase.find('[[')
        return frase

    def formataConteudo(self):
        self.conteudo = self.conteudo.strip('\'".')
        self.conteudo = '"' + self.conteudo + '."'


if __name__ == "__main__":
    c = CitacaoLimpa("[asdfas das df asdf |dfasdfasdf] dfgsdf", "sfdasdf asdf asdf [[asdfas das df asdf |dfasdfasdf]]kkk")
    print c